iT邦幫忙

2023 iThome 鐵人賽

DAY 7
1

Bean life cycle

Spring Bean的生命週期是指從創建到銷毀的整個過程,我們按照順序來分析了解:

  1. 實例化(Instantiation):這表示創建Bean的實例,沒什麼問題!
  2. 屬性設置(Population of Properties): Bean被實例化後,Spring容器會設置Bean的屬性,這通常涉及到使用Setter方法將值注入到Bean的屬性中,就是Bean的依賴注入。
  3. 初始化方法(Initialization): 如果Bean的定義包含了初始化方法,Spring容器將在屬性設置之後呼叫這些方法,也可以使用@PostConstruct註解來標記。
  4. 使用中(In Use): 在初始化完成後,Bean進入了使用階段,Bean會執行它的業務邏輯,處理請求,與其他Bean共同工作等。
  5. 銷毀(Destruction) 當Bean的生命週期結束時,像應用程序關閉時,Spring容器會調用銷毀方法,這可以是自定義的Java方法,也可以使用@PreDestroy註解來標記,Spring容器釋放Bean占用的資源,例如關閉文件、斷開數據庫連接等。

當然Bean可以根據你自己的需求對他進行自定義的生命週期!!!

當然,以下是一個包含Spring Bean生命週期的簡單示例。在這個示例中,我們將創建一個名為MrBean的Spring Bean,並定義它的初始化和銷毀方法。

首先,我們將創建一個MrBean類:

public class MrBean {

    private String name;

    public void init() {
        System.out.println("初始化Bean");
    }

    public void destroy() {
        System.out.println("銷毀Bean");
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sayTeddy() {
        System.out.println("Hi, " + name + "!");
    }
}

接下來,我們將在Spring配置文件中定義這個Bean,並設置其初始化和銷毀方法:

<bean id="mrBean" class="com.example.MrBean" init-method="init" destroy-method="destroy">
    <property name="name" value="Teddy" />
</bean>

<bean>元素定義了mrBean,指定類型為com.example.MrBean。我們還使用init-method屬性指定了初始化方法為initdestroy-method屬性指定銷毀方法為destroy,最後注入了一個名為name的屬性值。

接著,我們可以程式中使用這個Bean:

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        MrBean mrBean = (MrBean) context.getBean("mrBean");
        mrBean.sayTeddy();
        ((ConfigurableApplicationContext) context).close();
    }
}

這就是一個完整的Bean週期範例咯!

參考資料

https://docs.spring.io/spring-framework/reference/overview.html
https://www.baeldung.com/spring-bean
https://www.tutorialspoint.com/spring/spring_bean_life_cycle.htm


上一篇
Day 6 : Bean,是春天裡的豆豆先生!
下一篇
Day 8 : Bean 狙擊鏡?不對,是作用域。
系列文
Spring、Spirng MVC 及 Spring Boot 自主學習旅途!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言